import { defineStore } from 'pinia'
import { ITagView } from '@/api/interface'
import router from '@/router' // store中使用路由对象引入方式
const indexTag = { name: 'index', path: '/index', title: '首页' } // 首页Tag信息对象

export const useTagStore = defineStore('tag', {
	state: () => {
		return {
			tagList: [indexTag] as Array<ITagView>
		}
	},
	actions: {
		// 添加标签
		addTag(route: any) {
			// 重复的路由不添加，直接返回
			// 如何实现? 遍历tagList, 取出所有route与参数route比较
			// some 函数： 只要数组中有一项满足条件则返回true
			const isResult = this.tagList.some(item => item.path == route.path)
			if (isResult) return

			/**
			 *   在将传进来的标签json对象进行cookie持久化存储的时候，因为标签json对象里面有一些数组，就会遇到不能将json数据转换成字符串的错误
			 *   取出tag标签json对象中我们需要的值存放到一个新json数组中，将新的json数组添加到state中的tagList
			 * */
			const { name, path, meta } = route
			const newTag = {
				name,
				path,
				title: meta.title
			}
			this.tagList.push(newTag)
		},
		// 删除一个标签
		deleteTag(route: any) {
			this.tagList = this.tagList.filter(item => item != route)
		},
		// 删除所有标签
		deleteAllTag() {
			this.tagList = [indexTag]
			router.push(this.tagList[0].path)
		},
		deleteOtherTag(curentTag: ITagView) {
			this.tagList = [indexTag]
			if (curentTag.path != '/index') {
				this.tagList.push(curentTag)
			}
			router.push({ path: curentTag.path })
		}
	},
	// 使用该插件，开启数据缓存
	persist: {
		enabled: true
	}
})
